package br.com.sisgerenciamento.dto.produto;

import java.io.Serializable;
import java.security.NoSuchAlgorithmException;
import java.text.ParseException;

import br.com.sisgerenciamento.dto.empresa.EmpresaDTO;
import br.com.sisgerenciamento.dto.unidade.UnidadeProdutoDTO;
import br.com.sisgerenciamento.dto.usuario.UsuarioDTO;
import br.com.sisgerenciamento.exceptions.ApplicationException;
import br.com.sisgerenciamento.model.produto.ProdutoVO;
import br.com.sisgerenciamento.model.produto.TipoProdutoEnum;
import br.com.sisgerenciamento.utilidades.TreatDate;
import br.com.sisgerenciamento.utilidades.TreatNumber;
import br.com.sisgerenciamento.utilidades.TreatString;
import br.com.sisgerenciamento.utilidades.Validator;

public class ProdutoDTO implements Serializable {

	private static final long serialVersionUID = -8622428774500740510L;

	private String codigo;
	private String dataCadastro;
	private String status;
	private String descricao;
	private UnidadeProdutoDTO unidade = new UnidadeProdutoDTO();
	private String valorVarejo1;
	private String valorVarejo2;
	private String tipo;
	private UsuarioDTO usuario;
	private String quantidade;
	private EmpresaDTO empresa;
	
	public void validar() throws ApplicationException{
		Validator validator = Validator.novo();
		if(TreatString.isNotBlank(getTipo())&&TipoProdutoEnum.DEMANDA.getValor().equals(Integer.valueOf(getTipo()))){
			validator.obrigatorio(getStatus(), getDescricao(), getUnidade().getCodigo(), getValorVarejo1(), getValorVarejo2(), getTipo());
		}else{
			validator.obrigatorio(getStatus(), getDescricao(), getUnidade().getCodigo(), getValorVarejo1(), getValorVarejo2(), getTipo(), getQuantidade());
		}
		
	}
	
	public ProdutoVO getVO() throws NoSuchAlgorithmException, ParseException{
		ProdutoVO vo = new ProdutoVO();
		Validator validator = Validator.novo();
		vo.setCodigo(!validator.isNullOrZero(getCodigo()) ? new Long(getCodigo()) : null );
		vo.setDataCadastro(TreatDate.parseDate(getDataCadastro()));
		vo.setStatus("1".equals(getStatus())?true:false);
		vo.setDescricao(getDescricao() != null ? getDescricao().toUpperCase() : getDescricao());
		vo.setUnidade(getUnidade().getVO());
		vo.setValorVarejo1(TreatNumber.convertBigDecimal(getValorVarejo1()));
		vo.setValorVarejo2(TreatNumber.convertBigDecimal(getValorVarejo2()));
		vo.setTipo(TipoProdutoEnum.getByValor(new Integer(getTipo())));
		vo.setUsuario(getUsuario().getVO());
		vo.setQuantidade(TreatString.isNotBlank(getQuantidade())?new Integer(getQuantidade()):null);
		return vo;
	}
	
	public String getCodigo() {
		return codigo;
	}
	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
	public String getDataCadastro() {
		return dataCadastro;
	}
	public void setDataCadastro(String dataCadastro) {
		this.dataCadastro = dataCadastro;
	}
	public String getStatus() {
		return status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public UnidadeProdutoDTO getUnidade() {
		return unidade;
	}
	public void setUnidade(UnidadeProdutoDTO unidade) {
		this.unidade = unidade;
	}
	public String getValorVarejo1() {
		return valorVarejo1;
	}
	public void setValorVarejo1(String valorVarejo1) {
		this.valorVarejo1 = valorVarejo1;
	}
	public String getValorVarejo2() {
		return valorVarejo2;
	}
	public void setValorVarejo2(String valorVarejo2) {
		this.valorVarejo2 = valorVarejo2;
	}
	public String getTipo() {
		return tipo;
	}
	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
	public UsuarioDTO getUsuario() {
		return usuario;
	}
	public void setUsuario(UsuarioDTO usuario) {
		this.usuario = usuario;
	}
	public String getQuantidade() {
		return quantidade;
	}
	public void setQuantidade(String quantidade) {
		this.quantidade = quantidade;
	}
	public EmpresaDTO getEmpresa() {
    	return empresa;
    }
	public void setEmpresa( EmpresaDTO empresa ) {
    	this.empresa = empresa;
    }
}
